From 5196eb3f945c5685f049f98a0ce0e00f3d495323 Mon Sep 17 00:00:00 2001 From: "cl349@firebug.cl.cam.ac.uk" Date: Wed, 8 Feb 2006 15:36:49 +0000 Subject: [PATCH] x86-64 linux: properly exit idle mode from evtchn_do_upcall() Add a call to exit_idle() when evtchn_do_upcall() calls evtchn_device_upcall() instead of do_IRQ(). From: Jan Beulich Signed-off-by: Christian Limpach --- linux-2.6-xen-sparse/drivers/xen/core/evtchn.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/linux-2.6-xen-sparse/drivers/xen/core/evtchn.c b/linux-2.6-xen-sparse/drivers/xen/core/evtchn.c index 5779185e83..d27b0b625f 100644 --- a/linux-2.6-xen-sparse/drivers/xen/core/evtchn.c +++ b/linux-2.6-xen-sparse/drivers/xen/core/evtchn.c @@ -123,8 +123,10 @@ static void init_evtchn_cpu_bindings(void) #ifdef CONFIG_X86 extern fastcall unsigned int do_IRQ(struct pt_regs *regs); #if defined (__i386__) +static inline void exit_idle(void) {} #define IRQ_REG orig_eax #elif defined (__x86_64__) +#include #define IRQ_REG orig_rax #endif #define do_IRQ(irq, regs) do { \ @@ -170,8 +172,10 @@ asmlinkage void evtchn_do_upcall(struct pt_regs *regs) port = (l1i * BITS_PER_LONG) + l2i; if ((irq = evtchn_to_irq[port]) != -1) do_IRQ(irq, regs); - else + else { + exit_idle(); evtchn_device_upcall(port); + } } } } -- 2.30.2